<template>
  <div class="swiper-container" ref="swiper">
    <!-- 轮播图容器 -->
    <div class="swiper-wrapper">
      <!-- 轮播图 -->
      <div class="swiper-slide" v-for="(img, index) in imageList" :key="index">
        <img :src="img.imgUrl" :alt="img.imgName" />
      </div>
    </div>
    <!-- 左右箭头 -->
    <div class="swiper-button-next"></div>
    <div class="swiper-button-prev"></div>
    <!-- 小圆点分页器 -->
    <div class="swiper-pagination"></div>
  </div>
</template>

<script>
// 引入swiper js和css
import Swiper from "swiper";
import "swiper/css/swiper.min.css";

export default {
  name:'Carousel',
  props: {
    imageList: {
      type: Array,
      default: () => [],
    },
  },

  watch:{
    // watch方法会等imageList的值发生变化才会调用。
    // imageList的值发生变化了，数据也就变化了！！！
    imageList:{
      handler(imageList){
        if (!imageList.length || this.isInit) return;
        this.isInit = true
        this.$nextTick(()=>{
          // Vue响应式更新异步更新，会导致触发watch的时候，数据还未渲染成DOM元素，DOM元素还未生成
          // 这里可以使用 nextTick 方法，该方法会等DOM元素生成之后才触发，而且只触发一次
          const mySwiper = new Swiper(this.$refs.swiper, {
            // 左右箭头方向
            navigation: {
              nextEl: '.swiper-button-next',
              prevEl: '.swiper-button-prev',
            },
            // 小圆点分页器
            pagination: {
              el: '.swiper-pagination'
            },
            // 自动轮播
            autoplay:{
              delay:2000,
              disableOnInteraction: false, // 用户操作完轮播图后，再次开启自动轮播
            },
            // 无缝轮播
            loop: true,
          });
          mySwiper.el.onmouseenter = () => {
            mySwiper.autoplay.stop();
          }
          mySwiper.el.onmouseleave = () => {
            mySwiper.autoplay.start();
          }
        })
      },
      // 解决floor组件轮播图失效
      immediate: true,
    }
  },
}
</script>

<style>

</style>